package com.study.others.memoryOpe;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.junit.Test;

/**
* @Name: ByteArrayStream
* @Description: 内存字节数组操作流测试类
* ByteArrayOutputStream：此类实现了一个输出流，其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
* 						      关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用，而不会产生任何 IOException。 
* 	构造方法：
* 		ByteArrayOutputStream() 创建一个新的 byte 数组输出流。
* 	常用方法：
* 		void write(int b)  将指定的字节写入此 byte 数组输出流。
* 		void write(byte[] b, int off, int len)  将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。
* 		byte[] toByteArray()  获取指定字节数组大小的数据
* 		String toString()  使用平台默认的字符集，通过解码字节将缓冲区内容转换为字符串。
* 		String toString(String charsetName)  使用指定的 charsetName，通过解码字节将缓冲区内容转换为字符串。
* ByteArrayInputStream：包含一个内部缓冲区，该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。 
* 	构造方法：
* 		ByteArrayInputStream(byte[] buf) 创建一个 ByteArrayInputStream，使用 buf 作为其缓冲区数组。
* 		ByteArrayInputStream(byte[] buf, int offset, int length) 创建 ByteArrayInputStream，使用 buf 作为其缓冲区数组。
* 	常用方法：
* 		int read()  从此输入流中读取下一个数据字节。
* 		int read(byte[] b, int off, int len) 将最多 len 个数据字节从此输入流读入 byte 数组。
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-16 下午5:37:57 
* @Version: V1.0
 */
public class ByteArrayStream {
	
	@Test
	public void test() throws IOException {
		//创建字节数组写入流
		ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
		//写数据
		for (int i = 0; i < 10; i++) {
			baos.write(("hello" + i).getBytes()) ;
		}
		//将数据转换成字节数组
		byte[] buf = baos.toByteArray() ;
		//创建字节数组读取流
		ByteArrayInputStream bais = new ByteArrayInputStream(buf) ;
		int b = 0 ;
		while((b = bais.read()) != -1) {
			System.out.print((char) b);
		}
		//释放资源：无效，close()方法没有给出实现
		baos.close() ;
		bais.close() ;
	}

}










